package com.woniu.controller;

import com.woniu.model.NewsModel;
import com.woniu.repository.NewsRepository;
import com.woniu.service.Result;
import jakarta.websocket.server.PathParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class NewsController {
    @Autowired // 确保注入
    private NewsRepository newsRepository;

    @GetMapping("/news/list")
//    @RequestMapping(value = "/news/list" , method = RequestMethod.GET)
    public List<NewsModel> getNewsList(){

        List<NewsModel> newsList = new ArrayList();
        NewsModel newOne = new NewsModel();
        newOne.setContent("kkkkk");
        newOne.setAuthor("laney");
        newOne.setTitle("ceshi");
        newsList.add(newOne);
        return newsList;
    }
     @PostMapping("/news/add")
    public  Result<NewsModel>  addNews(@RequestBody NewsModel news){
        try {
            // 1. 校验数据（可选）
            if (news.getTitle() == null || news.getTitle().isEmpty()) {
                return Result.error(400, "标题不能为空");
            }
            // 2. 保存到数据库
           NewsModel savedNews  =   newsRepository.save(news); // 假设使用 JPA 保存

            System.out.println(savedNews);
            // 3. 返回成功消息
            return Result.success(savedNews);
        } catch (Exception e) {
            return Result.error(400, "添加失败");
        }
    }

    //更新新闻
    //    @PathVariable Long id,      // 从URL路径获取ID
    //    @RequestBody NewsModel news // 接收更新的数据
    @PutMapping("/news/edit/{id}")
    public Result<NewsModel> updateNews(@PathVariable Long id, @RequestBody NewsModel news) {

        // 1. 检查ID是否存在
        if (!newsRepository.existsById(id)) {
            return Result.error(404, "新闻不存在");
        }
        // 2. 设置ID（确保更新的是指定ID的数据）
        news.setId(id);
        // 3. 执行更新（save方法会自动识别是新增还是更新）
        NewsModel updatedNews = newsRepository.save(news);
        // 4. 返回结果
        return Result.success(updatedNews);
    }
    //根据id 删除某个新闻
    @DeleteMapping("/news/delete")
    public Result<Boolean> deleteById(@Param("id") Long id){
        // 1. 检查ID是否存在
        if (!newsRepository.existsById(id)) {
            return Result.error(404, "新闻不存在");
        }
//        在 Spring Data JPA 中，deleteById() 方法的返回值是 void
        newsRepository.deleteById(id);
        return  Result.success(true);
    }

    //  清除所有的新闻
    @DeleteMapping("/news/delete/all")
    public Result<Boolean> deleteAll(){

        newsRepository.deleteAll();
        return  Result.success(true);
    }

    //  删除多条新闻
//    使用 @RequestParam 替代 @Param（后者是 MyBatis 的注解）
    @DeleteMapping("/news/delete/more")
    public Result<Boolean> deleteMore(@RequestParam("ids") List<Long> ids){
        try {
            newsRepository.deleteAllById(ids);
            return  Result.success(true);
        } catch (Exception e) {
            return Result.error(500, "删除失败: " + e.getMessage());
        }

    }

}

